package cn.cheniy.swiftmark.common.database.util;

import cn.cheniy.swiftmark.common.database.dto.PageDTO;
import cn.cheniy.swiftmark.common.database.vo.PageVO;
import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageSerializable;

/**
 * @author cheniy
 * @description 通过PageHelper来获得分页
 *  
 */
public class PageUtil {


    /**
     * 用到pagehelper组件，传入PageDTO和一个查询操作，将查询结果集分页
     *
     * @param pageDTO 需要分页的参数
     * @param select  参数是一个查询操作
     * @return 分页结果
     * @param <T>
     */
    public static <T> PageVO<T> doPage(PageDTO pageDTO, ISelect select) {

        PageSerializable<T> simplePageInfo = PageHelper.startPage(pageDTO).doSelectPageSerializable(select);

        PageVO<T> pageVO = new PageVO<>();
        pageVO.setList(simplePageInfo.getList());
        pageVO.setTotal(simplePageInfo.getTotal());
        pageVO.setPages(getPages(simplePageInfo.getTotal(), pageDTO.getPageSize()));
        return pageVO;
    }


    /**
     * 计算总页数
     * @param total 总数据条目
     * @param pageSize 每页的大小
     * @return 总页数
     */
    public static Integer getPages(long total, Integer pageSize) {

        if (total == -1) {
            return 1;
        }
        if (pageSize > 0) {
            return  (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1));
        }
        return  0;
    }
}
